#pragma once

#include <vector>

#include "G4ParticleDefinition.hh"
#include "G4THitsMap.hh"
#include "G4VPrimitiveScorer.hh"

class RgDetourScorer : public G4VPrimitiveScorer
{
public:
    explicit RgDetourScorer(G4String name, G4int depth = 0,
                            G4int weight = 1);  // 与 G4 接口保持一致
    ~RgDetourScorer() override = default;

    // 关键接口
    G4bool ProcessHits(G4Step* step, G4TouchableHistory*) override;

    // 每次 Run 开始时清零
    void Initialize(G4HCofThisEvent*) override;

    // 事件结束后把本事件的 map 合并到 Run 的 map
    void EndOfEvent(G4HCofThisEvent*) override;

    // 输出用
    void DrawAll() override {}
    void PrintAll() override;

private:
    // 每个事件一个“工作区”
    struct TrackData
    {
        G4double csda;        // 累积步长
        G4ThreeVector start;  // 初位置
        G4ThreeVector end;    // 末位置
    };
    // 用 trackID 当 key，支持多粒子同时跑
    std::vector<TrackData> _fPerTrack;

    // 本 scorer 产生的三张 hits map
    G4THitsMap<G4double>* _fCSDAMap{};
    G4THitsMap<G4double>* _fProjMap{};
    G4THitsMap<G4double>* _fDetourMap{};

    // 辅助
    G4int _fHCID[3];                // hits collection ID
    G4int fDepth;                   // scorer 深度
    G4int fWeight;                  // 权重
    G4ParticleDefinition* _fAlpha;  // 如果只想记 α 可打开过滤
};
